package fiuba.td.fabrica.model.entities;

import java.util.List;

import junit.framework.TestCase;

import org.junit.Test;

import fiuba.td.fabrica.model.beans.LineaProduccionBean;
import fiuba.td.fabrica.model.utils.XmlUtils;

public class LaboratorioTest extends TestCase {
	private Laboratorio laboratorio;
	
	public void setUp() throws Exception {
		this.laboratorio = Laboratorio.getInstance();
		this.laboratorio.setInversionAcumulada(0);
	}
	
	
	@Test
	public void testAcumularInversionCero() {
		double inversionReal = this.laboratorio.invertir(0);
		assertEquals(0, inversionReal, 0);
	}

	@Test
	public void testAcumularInversionMenorMaximo() {
		double inversionReal = this.laboratorio.invertir(40);
		assertEquals(40, inversionReal, 0);
	}

	@Test
	public void testAcumularInversionMayorMaximo() {
		double inversionReal = this.laboratorio.invertir(60);
		assertEquals(50, inversionReal, 0);
	}
	
	@Test
	public void testInvestigar(){
		
		List<LineaProduccionBean> lineasProduccion = XmlUtils.getLineasProduccionBeanFromXml("lineas_produccion_test");

		// Acumulo plata en la investigacion del laboratorio
		while (this.laboratorio.getInversionAcumulada() < 1000){
			// Investigo con la inversion acumulada disponible
			this.laboratorio.investigar(lineasProduccion);
			
			// Valido que la segunda linea no este habilitada porque el costo es 1000
			assertFalse (lineasProduccion.get(1).isHabilitada());

			// Invierto en el laboratorioo
			this.laboratorio.invertir(1000);
		}
		
		// Investigo con la inversion acumulada disponible
		this.laboratorio.investigar(lineasProduccion);

		// Valido que la segunda este habilitada luego de la investigacion
		assertTrue (lineasProduccion.get(1).isHabilitada());
	}

}
